Popular Movies, Stage 2
Common Project Requirements
| Criteria | Meet Specification |
|---|---|
|
App is written solely in the Java Programming Language. |
App is written solely in the Java Programming Language. |
|
App conforms to common standards found in the Android Nanodegree General Project Guidelines. |
App conforms to common standards found in the Android Nanodegree General Project Guidelines. |
|
Submission must use stable release versions of all libraries, Gradle, and Android Studio. Debug/beta/canary versions are not acceptable. |
App utilizes stable release versions of all libraries, Gradle, and Android Studio. |
User Interface - Layout
| Criteria | Meet Specification |
|---|---|
|
UI contains an element (e.g., a spinner or settings menu) to toggle the sort order of the movies by: most popular, highest rated. |
UI contains an element (e.g., a spinner or settings menu) to toggle the sort order of the movies by: most popular, highest rated. |
|
Movies are displayed in the main layout via a grid of their corresponding movie poster thumbnails. |
Movies are displayed in the main layout via a grid of their corresponding movie poster thumbnails. |
|
UI contains a screen for displaying the details for a selected movie. |
UI contains a screen for displaying the details for a selected movie. |
|
Movie Details layout contains title, release date, movie poster, vote average, and plot synopsis. |
Movie Details layout contains title, release date, movie poster, vote average, and plot synopsis. |
|
Movie Details layout contains a section for displaying trailer videos and user reviews. |
Movie Details layout contains a section for displaying trailer videos and user reviews. |
User Interface - Function
| Criteria | Meet Specification |
|---|---|
|
When a user changes the sort criteria (most popular, highest rated, and favorites) the main view gets updated correctly. |
When a user changes the sort criteria (most popular, highest rated, and favorites) the main view gets updated correctly. |
|
When a movie poster thumbnail is selected, the movie details screen is launched. |
When a movie poster thumbnail is selected, the movie details screen is launched. |
|
When a trailer is selected, app uses an Intent to launch the trailer. |
When a trailer is selected, app uses an Intent to launch the trailer. |
|
In the movies detail screen, a user can tap a button (for example, a star) to mark it as a Favorite. Tap the button on a favorite movie will unfavorite it. |
In the movies detail screen, a user can tap a button (for example, a star) to mark it as a Favorite. Tap the button on a favorite movie will unfavorite it. |
Network API Implementation
| Criteria | Meet Specification |
|---|---|
|
In a background thread, app queries the /movie/popular or /movie/top_rated API for the sort criteria specified in the settings menu. OR Acceptable until April 8, 2016: In a background thread, app queries the /discover/movies API with the query parameter for the sort criteria specified in the settings menu. (Note: Each sorting criteria is a different API call.) This query can also be used to fetch the related metadata needed for the detail view. |
In a background thread, app queries the |
|
App requests for related videos for a selected movie via the /movie/{id}/videos endpoint in a background thread and displays those details when the user selects a movie. |
App requests for related videos for a selected movie via the |
|
App requests for user reviews for a selected movie via the /movie/{id}/reviews endpoint in a background thread and displays those details when the user selects a movie. |
App requests for user reviews for a selected movie via the |
Data Persistence
| Criteria | Meet Specification |
|---|---|
|
The titles and IDs of the user’s favorite movies are stored in a native SQLite database and exposed via a ContentProvider Data is updated whenever the user favorites or unfavorites a movie. No other persistence libraries are used. |
The titles and IDs of the user’s favorite movies are stored in a native SQLite database and exposed via a ContentProvider Data is updated whenever the user favorites or unfavorites a movie. No other persistence libraries are used. |
|
When the "favorites" setting option is selected, the main view displays the entire favorites collection based on movie ids stored in the database. |
When the "favorites" setting option is selected, the main view displays the entire favorites collection based on movie ids stored in the database. |
Android Architecture Components
| Criteria | Meet Specification |
|---|---|
|
If Room is used, database is not re-queried unnecessarily. LiveData is used to observe changes in the database and update the UI accordingly. |
If Room is used, database is not re-queried unnecessarily. LiveData is used to observe changes in the database and update the UI accordingly. |
|
If Room is used, database is not re-queried unnecessarily after rotation. Cached LiveData from ViewModel is used instead. |
If Room is used, database is not re-queried unnecessarily after rotation. Cached LiveData from ViewModel is used instead. |
Tips to make your project standout:
- Extend the favorites database to store the movie poster, synopsis, user rating, and release date, and display them even when offline.
- Implement sharing functionality to allow the user to share the first trailer’s
YouTubeURL from the movie details screen.